home *** CD-ROM | disk | FTP | other *** search
/ Whiteline: delta / whiteline CD Series - delta.iso / progtool / modula2 / module / randomiz.mod < prev    next >
Text File  |  1995-11-25  |  1KB  |  47 lines

  1. IMPLEMENTATION MODULE  Randomize;
  2.  
  3. FROM XBIOS104 IMPORT Random;
  4. FROM MathBase IMPORT real;
  5.  
  6. FROM SYSTEM IMPORT VAL;
  7.  
  8. VAR seed1,seed2,seed3 :INTEGER;
  9.  
  10. PROCEDURE random(Grenze:LONGINT):LONGINT;
  11. BEGIN
  12.   RETURN ABS(VAL(LONGINT,Random())MOD Grenze);
  13. END random;
  14.  
  15. PROCEDURE rnd(x:INTEGER):INTEGER;
  16. BEGIN
  17.    x:=ABS(VAL(INTEGER,Random()) MOD x);
  18.    RETURN x;
  19. END rnd;
  20.  
  21. PROCEDURE RanEcu():REAL;
  22. (* Ein portierbarer Pseudozufallszahlengenerator für 16-BIT INTEGER
  23.    Arithmetik nach Pierre L'Ecuyer -> ct5/94 *)
  24. VAR z,k:INTEGER;
  25. BEGIN
  26.     k:=seed1 DIV 206;
  27.     seed1:=157*(seed1-k*206)-k*21;
  28.     IF seed1<0 THEN seed1:=seed1+32363;END(*IF*);
  29.     k:=seed2 DIV 217;
  30.     seed2:=146*(seed2-k*217)-k*45;
  31.     IF seed2<0 THEN seed2:=seed2+31727;END(*IF*);
  32.     k:=seed3 DIV 222;
  33.     seed3:=142*(seed3-k*222)-k*133;
  34.     IF seed3<0 THEN seed3:=seed3+31657; END(*IF*);
  35.     z:=seed1-seed2;
  36.     IF z>706 THEN z:=z-32362;END(*IF*);
  37.     z:=z+seed3;
  38.     IF z<1 THEN z:=z+32362; END(*IF*);
  39.     RETURN real(z)*3.0899E-5;
  40. END RanEcu;
  41.  
  42. BEGIN
  43.    seed1:=rnd(32361)+1;
  44.    seed2:=rnd(31724)+1;
  45.    seed3:=rnd(31655)+1;
  46. END Randomize.
  47.